package cn.jesin.ssmss01.vo;

import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Collection;

/**
 * @author 谷汉斌
 * @description JwtUser实现类实现UserDetails接口，用于封装登录的用户信息 （内部流转使用）
 * UserDetails它提供了获取用户身份、密码、启用状态以及权限信息的方法
 * 接口定义了以下方法：
 * String getUsername(): 返回用户的唯一标识符，通常是用户名。
 * String getPassword(): 返回用户的密码。在实际应用中，这应该是经过哈希处理的密码，而不是明文密码。
 * Collection<? extends GrantedAuthority> getAuthorities(): 返回用户所具有的权限集合。GrantedAuthority是另一个接口，它表示用户可以执行的操作或拥有的权限。
 * boolean isAccountNonExpired(): 返回账户是否未过期。
 * boolean isAccountNonLocked(): 返回账户是否未被锁定。
 * boolean isCredentialsNonExpired(): 返回凭证（如密码）是否未过期。
 * boolean isEnabled(): 返回用户账户是否启用。
 * 这些方法共同构成了用户认证和授权所需的信息。
 * @createTime 2024/7/22 下午8:05
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class JwtUser implements UserDetails {

    private String key;
    private String password;
    private Collection<? extends GrantedAuthority> authorities;

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

    @Override
    public String getPassword() {
        return password;
    }

    @Override
    public String getUsername() {
        return key;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return authorities;
    }
}
